/*
 * IntefaceEjp.java
 */

package interfaz;
import acceso.Administrador;
import acceso.Catalogo;
import acceso.Pago;
import acceso.Pedido;
import acceso.Producto;
import acceso.Proveedor;
import acceso.Venta;
import java.util.List;

/**
 * InterfaceEjp
 *
 * Contrato generico que define las operaciones para cumplir con los casos
 * de uso, como tambien, servir como fachada entre la parte logica y
 * grafica.
 *
 * @author Adriano.
 */

public interface InterfaceEjp {

public Long registrarProducto (Producto producto);
public Long registrarVenta (Venta venta);
public void registrarVentaPersona(Long ventaid, Long productoid);
public Long registrarProveedor (Proveedor proveedor);
public Long registrarCatalogoProducto (Catalogo productoCatalogo);
public void registrarProductoProveedor(Long productoCatalogoId, Long proveedorId);
public Long registrarPedido (Pedido pedido);
public void registrarPedidoProveedor(Long pedidoId, Long productoId);
public Long registrarAdmin (Administrador admin);

     /**
     * Retorna todos los productos que se encuentran en el inventario.
     *
     * @return List <Producto>
     *         Retorna la lista de todos los productos almacenados en
     *         el inventario.
     */

public List <Producto> MostrarProductos ();

 /**
     * Compara el usuario y password introducido, el password va encriptado.
     *
     * @param  Administrador
     *         Objeto Administrador con todos los atributos seteados.
     *
     * @return boolean
     *         true o false segun el resultado de la comparacion.
     */

public boolean compararLogin (String Usuario, String Password);

 /**
     * Busca administradores por nombre y password.
     *
     * @param  Usuario, Password
     *         Nombre de usuario y Password del administrador.
     *
     * @return Administrador
     *         Objeto con la informacion del administrador.
     */

public Administrador buscarAdminPorNombrePassword (String Usuario, String Password);

     /**
     * Eliminar un producto del inventario mediante su codigo de
     * indentificacion.
     *
     * @param Long
     *        clave primaria para efectuar la eliminacion del producto
     */

public void EliminarProducto (Long id);

     /**
     * Retorna un producto del inventario mediante la busqueda por su
     * clave primaria.
     *
     * @param Long
     *        clave primaria para efectuar la busqueda del producto.
     *
     * @return Producto
     *         retorna un objeto del tipo Producto.
     */

public Producto BuscarProducto (Long id);

    /**
     * Retorna una lista de productos del inventario mediante
     * la busqueda por su tipo (Papeleria o Limpieza).
     *
     * @param char
     *        tipo del producto (P = Papeleria, L = Limpieza)
     *
     * @return List <Producto>
     *         retorna una lista de productos filtrados a traves de su
     *         tipo.
     */

public List <Producto> BuscarProductoPorTipo (char Tipo);

    /**
     * Retorna una lista de productos del inventario mediante la
     * busqueda por su Nombre.
     *
     * @param String
     *        Nombre del producto para efectuar su busqueda.
     *
     * @return List <Producto>
     *         retorna una lista de productos filtrado a traves de su
     *         nombre.
     */

public List <Producto> BuscarProductoPorNombre (String Nombre);

    /**
     * Retorna una lista de productos del inventario mediante la
     * busqueda por su clave primaria. Este metodo es generado para
     * cumplir con el metodo LlenarTablaProducto(List <Producto>) ubicado en
     * ui.PaginaPrincipal() ya que este recibe un tipo de dato List.
     *
     * @param Long
     *        clave primaria para efectuar la busqueda del producto.
     *
     * @return List <Producto>
     *         retorna en una lista el producto encontrado que contiene
     *         la clave primaria pasada como parametro.
     */

public List <Producto> BuscarProductoPoriD (Long id);

public List <Proveedor> BuscarProveedorPorTipo (char Tipo);
public List <Proveedor> BuscarProveedorPorTipoCodigoNombre (char Tipo,Long codigo,String nombre);
public List <Proveedor> BuscarProveedorPorCodigoNombre (Long codigo,String nombre);
public List <Proveedor> BuscarProveedorPorIdTipo (char tipo,Long id);
public List <Proveedor> BuscarProveedorPorNombreTipo (char tipo,String Nombre);
public List <Proveedor> BuscarProveedorPoriD (Long id);
public Proveedor BuscarProveedor (Long id);
public List <Proveedor> BuscarProveedorPorNombre (String Nombre);
public List<Proveedor> MostrarProveedores();
public void EliminarProveedor (Long id);


/**
     * Registra un servicio      *
     * @param Pago
     *        Onjecto de tipo Pago, para realizar la inserción
     *
     * @return Long
     *         retorna el id del nuevo servicio.
     */
    public Long registrarPago(Pago pago);

/**
     * Eliminar un servicio mediante su codigo de
     * indentificacion.
     *
     * @param Long
     *        clave primaria para efectuar la eliminacion del servicio
     */
public void EliminarPago (Long id);


 /**
     * Retorna un servicio mediante la busqueda por su
     * clave primaria.
     *
     * @param Long
     *        clave primaria para efectuar la busqueda del servicio.
     *
     * @return Pago
     *         retorna un objeto del tipo Pago.
     */
public Pago BuscarPago (Long id);

   /**
     * Retorna todos los servicios que se tienen registrados.
     *
     * @return List <Pago>
     *         Retorna la lista de todos los servicios
     */

public List <Pago> MostrarPagos();

  /**
     * Retorna una lista de servicios mediante la
     * busqueda por su Nombre.
     *
     * @param String
     *        Nombre del servicio para efectuar su busqueda.
     *
     * @return List <Pago>
     *         retorna una lista de servicios filtrado a traves de su
     *         nombre.
     */

public List <Pago> BuscarPagoPorNombre (String Nombre);

    /**
     * Retorna una lista de servicios del mediante la
     * busqueda por su clave primaria. Este metodo es generado para
     * cumplir con el metodo LlenarTablaPago(List <Pago>) ubicado en
     * ui.PaginaPrincipal() ya que este recibe un tipo de dato List.
     *
     * @param Long
     *        clave primaria para efectuar la busqueda del servicio.
     *
     * @return List <Pago>
     *         retorna en una lista el servicio encontrado que contiene
     *         la clave primaria pasada como parametro.
     */

public List <Pago> BuscarPagoPoriD (Long id);


}
